#include <iostream>
#include <string>
#include <map>
#include <set>

using namespace std;

int main()
{
    map<string, size_t> word_count = {{"hello", 1}, {"world", 2}};
    // 获得指向 word_count 中一个元素的迭代器
    auto map_it = word_count.begin();
    // *map_it 是指向一个 pair<const string, size_t> 对象的引用
    cout << map_it->first;           // 打印此元素的关键字
    cout << " " << map_it->second << endl;   // 打印此元素的值
    // map_it->first = "new key";       // 错误：关键字是 const 的
    ++map_it->second; // 正确：可以改变关键字关联的值

    set<int> iset = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    set<int>::iterator set_it = iset.begin();
    if (set_it != iset.end()) {
        // *set_it = 42;               // 错误：set 中的关键字是只读的
        cout << *set_it << endl;    // 正确：可以读关键字
    }

    // 比较当前迭代器和尾后迭代器
    while (map_it != word_count.cend()) {
        // 解引用迭代器，打印关键字-值对
        cout << map_it->first << " occurs "
            << map_it->second << " times" << endl;
        ++map_it; // 递增迭代器，移动到下一个元素
    }
}